package annotation;

import java.lang.annotation.Annotation;

public class Main {
	/**
	 * 注解是标记，也可以理解成是一种应用在类，方法，参数，属性，构造器傻瓜的特殊修饰符
	 * 注解作用有以下三种：
	 * 1. 生成文档 常用的有 @param @return
	 * 2. 替代配置文件的作用，尤其是在spring等一些框架中，使用注解可以大量的减少配置文件的数量
	 * 3. 检查代码的格式， 如@override 标识某一个方法是否覆盖了它的父类的方法
	 * 
	 * 二. 注解的底层也是使用反射实现的，我们可以自定义一个注解来体会下。注解和接口有点类似，不过申明注解类需要加上@interface
	 * 注解类里面，只支持基本类型，String及枚举类型，里面所有属性被定义成方法，并允许提供默认值。
	 * java5.0开始 在java.lang.annotations中提供了四种元注解，专门注解其他的注解：
	 * 
	 * @target --注解用于什么地方
	 * @Retention -- 注解运行状态
	 * @Documented --生成说明文档，添加类的注解
	 * @inherited -- 允许子类继承父类中的主解
	 * 
	 * @param args
	 * @throws ClassNotFoundException 
	 */

	public static void main(String[] args) throws ClassNotFoundException {
		// TODO Auto-generated method stub
		Class<?> classTest = Class.forName("annotation.Test");
		Annotation[] ann = classTest.getAnnotations();
		for(Annotation aa:ann) {
			User user = (User)aa;
			System.out.println(user.name());
			System.out.println(user.nickname());
		}
		

	}

}
